package collectionMapDemo.collection;

import java.util.ArrayList;
import java.util.List;

public class TestGeneric {

    /* 带有泛型——Course的List类型属性*/
    public List<Course> courses;

    public TestGeneric() {
        this.courses = new ArrayList<Course>();
    }

    // test add method
    public void testAdd() {
        Course cr1 = new Course("1", "大学语文");
        courses.add(cr1);
        // 泛型集合中，不能添加泛型规定的类型及其子类型以外的对象，否则会报错
        // courses.add("Can add a string?");
        Course cr2 = new Course("2", "JavaSE");
        courses.add(cr2);
    }

    // 测试循环遍历的方法
    public void testForEach() {
        int idx = 0;
        for (Course cr : courses) {
            System.out.println("当前的课程--" + idx + "--" + cr.id + ": " + cr.name);
            idx++;
        }
        System.out.println();
    }

    // 泛型集合可以添加泛型的子类型的对象实例
    public void testChild() {
        ChildCourse ccr = new ChildCourse();
        ccr.id = "3";
        ccr.name = "我是子类型的课程对象实例";
        courses.add(ccr);
    }

    // 泛型不能使用基本类型
    public void testBasicType() {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        System.out.println("基本类型的包装类作为泛型： " + list.get(0));
    }

    public static void main(String[] args) {
        TestGeneric tg = new TestGeneric();
        tg.testAdd();
        tg.testForEach();
        tg.testChild();
        tg.testForEach();
        tg.testBasicType();
    }
}
